package zaplog

import "go.uber.org/zap/zapcore"

type configEntry struct {
	IsDebug       bool                      `yaml:"isDebug"`       //是否调试模式
	TimePrecision string                    `yaml:"timePrecision"` //记录日志时，相关的时间精度，该参数选项：second  、 millisecond ， 分别表示 秒 和 毫秒 ,默认为毫秒级别
	TextFormat    string                    `yaml:"textFormat"`    //记录日志的格式，参数选项：console、json ， console 表示一般的文本格式
	LogPath       string                    `yaml:"logPath"`       //设置Go项目骨架运行时日志文件名，注意该名称不要与上一条重复 ,避免和 gin 框架的日志掺杂一起，造成混乱。
	MaxSize       int                       `yaml:"maxSize"`       //每个日志的最大尺寸(以MB为单位）， 超过该值，系统将会自动进行切割
	MaxBackups    int                       `yaml:"maxBackups"`    //保留旧日志最大个数
	MaxAge        int                       `yaml:"maxAge"`        //保留旧日志最大天数
	Compress      bool                      `yaml:"compress"`      //日志备份时，是否进行压缩
	HookFunc      func(zapcore.Entry) error //日志回调函数
}

type OptFunc func(option *configEntry)

func SetIsDebug(isDebug bool) OptFunc {
	return func(option *configEntry) {
		option.IsDebug = isDebug
	}
}
func SetTimePrecision(timePrecision string) OptFunc {
	return func(option *configEntry) {
		option.TimePrecision = timePrecision
	}
}
func SetTextFormat(textFormat string) OptFunc {
	return func(option *configEntry) {
		option.TextFormat = textFormat
	}
}
func SetLogPath(logPath string) OptFunc {
	return func(option *configEntry) {
		option.LogPath = logPath
	}
}
func SetMaxSize(maxSize int) OptFunc {
	return func(option *configEntry) {
		option.MaxSize = maxSize
	}
}
func SetMaxBackups(maxBackups int) OptFunc {
	return func(option *configEntry) {
		option.MaxBackups = maxBackups
	}
}
func SetMaxAge(maxAge int) OptFunc {
	return func(option *configEntry) {
		option.MaxAge = maxAge
	}
}
func SetCompress(compress bool) OptFunc {
	return func(option *configEntry) {
		option.Compress = compress
	}
}
func SetHookFunc(hookFunc func(zapcore.Entry) error) OptFunc {
	return func(option *configEntry) {
		option.HookFunc = hookFunc
	}
}
